2025年12月CCF—GESP(C++二级)编程能力等级认证试卷
二级
2025
2026-07-21 17:19:04
172次
一、单选题
阅读下面的C++代码。执行后如输入 5 ,其输出的字符图形是( )。
int n,i,j,k;
cin >> n;
for (i = 0; i < n; i++){
for (j = 0; j < n-i-1; j++)
cout << " ";
for (k = 0; k < 2*i+1; k++)
cout << "*";
cout << endl;
} A.***** **** *** ** * |
B.* *** ***** ******* ********* |
C.* ** *** **** ***** |
D.* ** *** **** ***** |
【知识点】 CCF—GESP C++二级
某单位工号的编码规则:编码总长5位,均为数字,前4位依次整除以3其值累加之和除以10的余数为第5位数字。如某工号为76587,前4位分别整除以3后,商分别为2、2、1、2,其累加之和为7,除以10的余数为7,故第5位为7。下面代码依次输入前4位后,两个横线处分别应填的是( )。
int rst = 0, N;
for (int i = 0; i < 4; i++){
cin >> N;
rst += ___________; // L1
}
cout << ___________; // L2 | A.N % 3 rst / 10 | B.N % 3 rst % 10 |
| C.N / 3 rst / 10 | D.N / 3 rst % 10 |
【知识点】 CCF—GESP C++二级
与下面C++输出效果不一致的代码是( )。
int i; for (i = 0; i < 10; i++) cout << i;
A.int i = 0;
while (i < 10){
cout << i;
i += 1;
} |
B.int i = 0;
while (i < 10){
i += 1;
cout << i;
} |
C.int i = 0;
while (true){
cout << i;
i += 1;
if (i >= 10)
break;
} |
D.int i = 0;
while (true){
if (i >= 10)
break;
cout << i;
i += 1;
} |
【知识点】 CCF—GESP C++二级
漂亮数的定义是:如果N能被M整除,或者某位是M,或者N的每位数之和能被M整除,则说N是M的漂亮数。如果三个条件都满⾜,则是完整漂亮数。123是3的完整漂亮数,因为123能被3整除,也含有3,其每位数之和为6也能被3整除。下⾯的代码⽤于判断N是否为M的完整漂亮数并输出。相关说法正确的是( )。
int N, M, Flag, Sum, num;
cout << "请输入N,不等于0的正整数:";
cin >> N;
cout << "请输入M:M必须大于1小于9:";
cin >> M;
Sum = 0; // 记录各位数之和
Flag = 0; // 假设记录N不含有M
while (N != 0){
num = N % 10;
Sum += num;
if (num == M)
Flag = 1;
N /= 10;
}
if ((N % M == 0) && (Flag == 1) && (Sum % M == 0)) // L1
printf("%d 是 %d 的完整漂亮数", N, M);
else
printf("%d 不是 %d 的完整漂亮数", N, M); | A. 代码能完成题目设定目标。 |
B. 在 while 循环中N最终将变成0,因此L1行代码中 N % M 将总是满足条件,可以在 while 前增加一行代码int old_num = N; ,并将L1开始这4行代码中的 N都改为 old_num 就可以做出正确的判定。 |
| C. while 循环中 if 判断语句可以增加 else 子句,其内容为 Flag = 0 。 |
D. 如果先后输入 0 和 3 ,则肯定会输出 0是3的完整漂亮数 。 |
【知识点】 CCF—GESP C++二级
某学校举办“十佳歌手大奖赛”,经过选拔最终参赛选手有25人,评委10人,最终计分规则去掉一个最高分去掉一个最低分作为该参赛选手的最终得分,并输出该得分。如果单个评委可给满分为10分,则相关说法正确的是( )
float total_score, max_score, min_score, now_score;
for (int i = 0; i < 25; i++){
max_score = 0; // 记录最高分
min_score = 10; // 记录最低分
total_score = 0; // 记录总分
for (int j = 0; j < 10; j++){
cin >> now_score; // 录入评委打分
max_score = max(max_score, now_score); // L1
min_score = min(min_score, now_score); // L2
total_score += now_score;
}
cout << (total_score - max_score - min_score);
} | A. 程序总体逻辑错误。因为要去掉最高分和最低分需要排序,而程序没有相关代码。 |
B. 内层循环和外层循环之间的三行代码也就是max_score = 0 开始的三行代码应该移动到外层循环外。 |
| C. L1和L2标记的两行代码可以分别改为简单的 if 语句或 ? : 语句。 |
D. total_score += now_score 不可以更改为 total_score = total_score + now_score 。 |
【知识点】 CCF—GESP C++二级
二、判断题
下面C++代码执行后输出如下,因为代码 printf("\n") 没有任何可读内容,删除不影响输出效果。( )
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
for (int i = 1; i < 10; i++) {
for(int j = 1; j < 10; j++)
printf("%3d", i * j);
printf("\n");
} | A.正确 | B.错误 |
【知识点】 CCF—GESP C++二级
三、编程题
环保能量球
时间限制:1.0 s
内存限制:512.0 MB
题目描述
小杨最近在玩一个环保主题的游戏。在游戏中,小杨每行走 1 公里就可以获得 1 点“环保能量”。
为了激励玩家,游戏设置了“里程奖励”:小杨每行走x公里,游戏就会额外奖励 1 点能量。
现在已知小杨总共行走了n公里,请你帮他计算,他一共能获得多少点环保能量?
输入格式
第一行包含一个正整数 t ,代表测试数据组数。
对于每组测试数据:
第一行包含一个正整数 n ,代表行走的公里数。
第二行包含一个正整数 x,代表奖励触发的间隔。
输出格式
对于每组测试数据,输出一个整数,代表小杨获得的环保能量总数。
输入样例
3 5 2 10 3 2 5
输出样例
7 13 2
样例解释
对于第 1 组数据,n = 5, x= 2:小杨行走获得 5 点能量 。此外 ,他在第 2 公里和第 4 公里时各获得 1 点额外奖励 ,总共 5 + 2 = 7 点。
对于第 2 组数据,n = 10, x= 3 :行走获得 10 点。他在第 3、6、9 公里时各获得 1 点额外奖励,总共10 + 3 = 13 点。
对于第 3 组数据,n = 2, x= 5 :行走获得 2 点。由于行走路程不足 5 公里,没有额外奖励,总共 2 点。
数据范围
对于全部数据,保证:1 ≤ t ≤ 100, 1 ≤ n,c ≤ 1000。
【知识点】 CCF—GESP C++二级


